package com.nbst.controller.base;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.nbst.comnutil.Tools;
import com.nbst.service.base.IBaseService;

/**
 * @ClassName: BaseController
 * @Description:基础几个操作抽出的类，可以被之后新增的其他Controller继承
 * @author King
 * @date 2019年12月13日
 * 
 */
public abstract class BaseController<T, S extends IBaseService<T>> {
	@Autowired
	S service;

	public S getService() {
		return service;
	}

	/**
	 * 根据条件查询
	 * 
	 * @param map
	 * @param offset
	 * @param row
	 * @return NormalResult
	 * @author King
	 * @date 2019年12月13日
	 */
	@PostMapping("/findByCondition.action")
	public Object findByCondition(T t, @RequestParam(required = false, defaultValue = "1") Integer offset,
			@RequestParam(required = false, defaultValue = "10") Integer row) {
		Map<String,Object> map = Tools.transBean2Map(t);
		return service.findByCondition(map, offset, row);
	}

	/**
	 * 有选择性的新增
	 * 
	 * @param t
	 * @return NormalResult
	 * @author King
	 * @date 2019年12月13日
	 */
	@PostMapping("/addNew.action")
	public Object insertSelective(T t) {
		return service.insertSelective(t);
	}

	/**
	 * 有选择性的修改
	 * 
	 * @param t
	 * @return NormalResult
	 * @author King
	 * @date 2019年12月13日
	 */
	@PostMapping("/update.action")
	public Object updateByPrimaryKeySelective(T t) {
		return service.updateByPrimaryKeySelective(t);
	}

	/**
	 * 根据主键删除
	 * 
	 * @param t
	 * @return NormalResult
	 * @author King
	 * @date 2019年12月13日
	 */
	@PostMapping("/remove.action")
	public Object deleteByPrimaryKey(T key) {
		return service.deleteByPrimaryKey(key);
	}

}
